﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

public class FightEquipMgr
{
    public Dictionary<byte, List<Equip>> Equips { get; private set; }

    public FightEquipMgr()
    {
        Equips = new Dictionary<byte, List<Equip>>();
    }

    /// <summary>
    /// 添加出战装备
    /// </summary>
    public void Add(Equip equip)
    {
        if (!Equips.TryGetValue(equip.szPos, out List<Equip> equipList))
        {
            equipList = new List<Equip>();
            Equips.Add(equip.szPos, equipList);
        }
        equipList.Add(equip);
    }

    /// <summary>
    /// 获取出战装备
    /// </summary>
    public bool TryGet(byte szPos, long equipId, out Equip equip)
    {
        equip = null;
        if (!Equips.TryGetValue(szPos, out List<Equip> equipList))
        {
            return false;
        }

        for (int i = 0; i < equipList.Count; i++)
        {
            if (equipId == equipList[i].id)
            {
                equip = equipList[i];
                return true;
            }
        }
        return false;
    }

    /// <summary>
    /// 获取出战装备
    /// </summary>
    public bool TryGet(long equipId, out Equip equip)
    {
        equip = null;
        foreach (var ls in Equips.Values)
        {
            for (int i = 0; i < ls.Count; i++)
            {
                if (equipId == ls[i].id)
                {
                    equip = ls[i];
                    return true;
                }
            }
        }
        return false;
    }

    /// <summary>
    /// 获取装备(装备类型 1:武器，2:衣服 3:戒指 4:鞋子)
    /// </summary>
    public bool TryGetByType(byte szPos, int equipType, out Equip equip)
    {
        equip = null;
        if (!Equips.TryGetValue(szPos, out List<Equip> equipList))
        {
            return false;
        }

        for (int i = 0; i < equipList.Count; i++)
        {
            InitEquip initEquip = equipList[i].InitEquip;
            if (initEquip != null)
            {
                if (initEquip.kind == equipType)
                {
                    equip = equipList[i];
                    return true;
                }
            }
        }
        return false;
    }

    /// <summary>
    /// 获取所有
    /// </summary>
    public List<Equip> GetAll(byte szPos)
    {
        if (!Equips.TryGetValue(szPos, out List<Equip> equipList))
        {
            return new List<Equip>();
        }

        return equipList;
    }

    /// <summary>
    /// 移除出战装备
    /// </summary>
    public void Remove(byte szPos, long equipId)
    {
        if (!Equips.TryGetValue(szPos, out List<Equip> equipList))
        {
            return;
        }

        for (int i = 0; i < equipList.Count; i++)
        {
            if (equipId == equipList[i].id)
            {
                equipList.RemoveAt(i);
                return;
            }
        }
    }
}
